﻿// MIT License
// 开源地址：https://gitee.com/co1024/AbcMvc
// Copyright (c) 2021-2023 1024
// Abc.Mvc=Furion+EF+SqlSugar+Pear layui admin.

using Furion;
using Furion.Schedule;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using StackExchange.Profiling.Internal;

namespace Abc.Job;


[AppStartup(500)]
public class JobStartup : AppStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSchedule(options =>
        {
            // 是否使用 UTC 时间，该配置主要用来作为作业调度器检查时间格式的依据
            options.UseUtcTimestamp = false;

            // 是否输出作业调度器日志
            options.LogEnabled = true;

            // 配置集群 Id，默认值为启动程序集的名称
            options.ClusterId = "cluster1";

            // 配置输出 SQL 的数据库类型，Furion 4.8.2.3+
            options.BuildSqlType = SqlTypes.SqlServer;

            // 启用作业执行日志输出，Furion 4.8.3.7+ 版本支持
            options.JobDetail.LogEnabled = true;      // 默认 false

            // 定义未捕获的异常，通常是 Task 异常
            options.UnobservedTaskExceptionHandler = (obj, args) =>
            {
                LogEx.Debug($"obj:{obj?.ToJson()}\r\nargs:{args?.ToJson()}");
            };


            //手动
            // 注册作业，并配置作业触发器
            //options.AddJob<MyJob>(Triggers.Secondly()); // 表示每秒执行

            var schedulerBuilders = App.EffectiveTypes.ScanToBuilders();
            //自动注册
            options.AddJob(App.EffectiveTypes.ScanToBuilders());

        });

    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 还可以配置生产环境关闭
        app.UseScheduleUI(options =>
        {
            // 此操作暂提供 URL 重写功能，也就是会自动跳转
            options.RequestPath = "/custom-job";  // Furion 4.8.5.6+ 版本支持，必须以 / 开头且不以 / 结尾
            options.DisableOnProduction = true;
        });
    }
}
